هذا السؤال له بالفعل إجابات هنا: Express js - لا يمكن إعادة التوجيه (4 إجابات) مغلق منذ 7 سنوات. أنا أستخدم جواز سفر مع برمجيات وسيطة أدناه. من المفترض أن تتحقق مما إذا كان المستخدم يقوم بتسجيل الدخول عندما يطلب أشياء معينة. إذا لم يتم تسجيل دخوله ، فيجب إعادة توجيهه إلى صفحة تسجيل الدخول. لدي طلب طريق على النحو التالي: app.put ('/ fantasyteams /: fantasyTeamId'، auth.requiresLogin، fantasyteams.update) ؛ سيتم استدعاء هذا المسار عندما يحاول المستخدم تحديث مورد يسمى Fantasy Team في موقع الويب auth.requiresLogin عبارة عن برمجية وسيطة على النحو التالي: export.requiresLogin = function (req، res، next) { إذا (req.isAuthenticated ()) { العودة التالية () } إرجاع res.redirect ("/ تسجيل الدخول") ؛ } ؛ بعد تسجيل الدخول إلى المستخدم ، قمت بمحاكاة انتهاء الجلسة عن طريق حذف ملف تعريف ارتباط الجلسة. بعد ذلك عبر موقع الويب ، قدمت طلب PUT '/ fantasyteams / 123' لتحديث رقم فريق الخيال 123. fantasyteams.update هو ببساطة عملية حفظ mongodb / mongoose: export.update = function (req، res) { var fantasyteam = req.fantasyteam ؛ fantasyteam = _.extend (فريق fantasyteam ، req.body) ؛ fantasyteam.save (وظيفة (يخطئ) { res.jsonp (فريق فانتازيا) ؛ }) ؛ } ؛ كما هو متوقع ، قام معالج التوجيه (app.put ...) أعلاه بإمساك الطلب ، وقم بتمريره إلى البرنامج الوسيط auth.requiresLogin للتحقق مما إذا كان المستخدم قد قام بتسجيل الدخول. لذلك اتضح أن المستخدم لم يقم بتسجيل الدخول منذ أن حذفت ملف تعريف الارتباط الخاص بجلسته. يتم استدعاء res.redirect كما هو متوقع. ومع ذلك ، لا يقوم موقع الويب بإعادة التوجيه إلى صفحة تسجيل الدخول. أرى هذا في سجلات أوامر node.js: وضع / تسجيل الدخول 404328 مللي ثانية أي خطأ ارتكبت؟
2021-02-25 08:20:22
يبدو أن المشكلة هي أنه ليس لديك معالج مسار لـ PUT / Signin كان الطلب الأصلي عبارة عن وضع ، لذلك عند إعادة التوجيه ، يظل جزءًا من نفس طلب "put" من المتصفح. ما عليك سوى إضافة معالج لوضع / نشر / أي شيء باستخدام app.all ('/ تسجيل الدخول') 3 | ليس الجواب الذي تبحث عنه؟ تصفح الأسئلة الأخرى الموسومة بجلسة node.js ملفات تعريف الارتباط تعبر عن جواز السفر أو اطرح سؤالك.